/*************************************************************************
 *                                                                       *
 * This file is part of the FreeMAPs distribution.  For full copyright   *
 * information, see COPYRIGHT and COPYING.LESSER.                        *
 *                                                                       *
 * Author:           sqbang                                              *
 * Email:            sqbang@ustc.edu                                     *
 * Date:             2017.05.25                                          *
 *                                                                       *
 *************************************************************************/

#ifndef FreeMAPs_include_COMMON_equa_EquationEnsembleStrategy_h
#define FreeMAPs_include_COMMON_equa_EquationEnsembleStrategy_h

#include "FreeMAPsConfig.h"

//COMMON headers
#include "COMMON/base/StateIndicator.h"
#include "COMMON/enum/EquationEnsembleType.h"

namespace FreeMAPs
{

class EquationEnsembleStrategy : public StateIndicator
{
protected:

    EquationEnsembleStrategy (
        const std::string& parent_name,
        const std::string& equation_ensemble_name);

public:

    virtual
    ~EquationEnsembleStrategy ();

public:

    inline const std::string&
    get_equation_ensemble_name() const;



public:

    virtual EquationEnsembleType
    get_equation_ensemble_type() const = 0;
#if 0
    virtual void
    initialize() = 0;

    virtual double
    get_stable_dt() const = 0;

    virtual void
    process_before_advance() = 0;

    virtual void
    process_after_advance() = 0;

    virtual void
    process_before_advance_in_context() = 0;

    virtual void
    process_after_advance_in_context() = 0;

    virtual int
    advance() = 0;

    virtual bool
    is_result_acceptable() const = 0;

    virtual void
    update_after_advance() = 0;

    virtual void
    roll_back() = 0;
#endif
    virtual void
    get_from_input (
        const InputDatabase* db) = 0;

private:

    typedef StateIndicator Parent;

private:

    DISALLOW_COPY_AND_ASSIGN (EquationEnsembleStrategy);
};

}

#include "COMMON/equa/EquationEnsembleStrategy.inl"

#endif
